package aceim.app.screen.simple; import static aceim.app.utils.linq.KindaLinq.from; import java.util.List; import aceim.api.utils.Logger; import aceim.api.utils.Logger.LoggerLevel; import aceim.app.MainActivity; import aceim.app.R; import aceim.app.screen.Screen; import aceim.app.utils.PageManager; import aceim.app.utils.linq.KindaLinqRule; import aceim.app.view.page.Page; import aceim.app.view.page.Page.PageChangedListener; import aceim.app.view.page.contactlist.ContactList; import aceim.app.view.page.other.Splash; import aceim.app.widgets.bottombar.BottomBarButton; import aceim.app.widgets.pageselector.PageAdapter; import aceim.app.widgets.pageselector.TabSelector; import android.annotation.SuppressLint; import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewConfiguration; public class SimpleScreen extends Screen implements PageChangedListener { private final PageAdapter mPageAdapter; private final TabSelector mTabHolder; private final BottomBarButton mMenuButton; private final PageManager mPageManager; private final OnHierarchyChangeListener mTabChangedListener = new OnHierarchyChangeListener() { @Override public void onChildViewRemoved(View parent, View child) {} @Override public void onChildViewAdded(View parent, View child) { mTabHolder.setSelectedPage((Page) child.getTag()); } }; public SimpleScreen(MainActivity activity) { super(activity); LayoutInflater.from(activity).inflate(R.layout.screen_simple, this); mTabHolder = (TabSelector) findViewById(R.id.tab_selector); mMenuButton = (BottomBarButton) findViewById(R.id.menu_button); mPageManager = new PageManager(R.id.fragment_holder, activity); mPageAdapter = new PageAdapter(activity, mTabClickListener, activity.getThemesManager().getViewResources().getTabItemLayout(), mPageManager.getPages()); mPageAdapter.setNotifyOnChange(true); mTabHolder.setPageAdapter(mPageAdapter); mTabHolder.setOnHierarchyChangeListener(mTabChangedListener); mMenuButton.setOnClickListener(mMenuButtonClickListener); mMenuButton.setOnLongClickListener(mMenuButtonLongClickListener); } @Override public void addPage(Page page, boolean setAsCurrent) { String pageId = page.getPageId(); if (findPage(pageId) == null) { mPageAdapter.add(page); } if (setAsCurrent) { setSelectedPage(pageId); } } //TODO move to root Screen class @SuppressLint("NewApi") private void setMenuButtonAvailability() { mMenuButton.setVisibility( Build.VERSION.SDK_INT <= 10 || (Build.VERSION.SDK_INT >= 14 && ViewConfiguration.get(getContext()).hasPermanentMenuKey()) ? View.GONE : View.VISIBLE); } @Override public Page findPage(final String pageId) { return from(mPageManager.getPages()).where(new KindaLinqRule<Page>() { @Override public boolean match(Page t) { return t.getPageId().equals(pageId); } }).first(); } @Override public void onPageChanged(String pageId) { mPageManager.onPageChanged(findPage(pageId)); } @Override public void setSelectedPage(String pageId) { onPageChanged(pageId); Page page = findPage(pageId); if (page == null) { Logger.log("No page found for ID #" + pageId, LoggerLevel.WARNING); return; } mTabHolder.setSelectedPage(page); if (!(page instanceof Splash) && page.hasMenu()) { setMenuButtonAvailability(); } else { mMenuButton.setVisibility(View.GONE); } } @Override public List<Page> findPagesByRule(KindaLinqRule<Page> rule) { return from(mPageManager.getPages()).where(rule).all(); } @Override public Page getSelectedPage() { return mPageManager.getSelectedPage(); } @Override public Page getSelectedContactList() { return (mPageManager.getSelectedPage() instanceof ContactList) ? mPageManager.getSelectedPage() : null; } @Override public void removePage(Page page) { mPageAdapter.remove(page); mPageManager.onPageRemoved(page); if (mPageManager.getPages().size() > 0) { setSelectedPage(mPageManager.getPages().get(0).getPageId()); } else { getActivity().exitApplication(); } } @Override public void updateTabWidget(Page p) { View tabWidget = mTabHolder.findViewWithTag(p); mPageAdapter.fillWithImageAndTitle(tabWidget, p); } @Override public List<Page> getAllPages() { return mPageManager.getPages(); } @Override public void storeScreenSpecificData(Bundle bundle) {} @Override public void recoverScreenSpecificData(Bundle bundle) {} }